<?php

/**
 * Description of RepoCliente
 *
 * @author  Mariano Renkine
 * @author  Fernando Arau
 */
class RepoCliente extends Repositorio
{

  function __construct()
  {
    $this->tabla = "cliente_eventual";
    $this->id = "idClienteEventual";
  }

  function agregar(Cliente $cliente)
  {
    try
    {

      $link = $this->OpenDB();
      $this->beginTransaction();
      $query = "INSERT INTO " . $this->tabla . "(nombre, apellido, nroDocumento, domicilio, telefono, email, tipoDocumento, usuario, deshabilitado) values (";
      $query .= "'" . $cliente->getNombre() . "', ";
      $query .= "'" . $cliente->getApellido() . "', ";
      $query .= "'" . $cliente->getNroDocumento() . "', ";
      $query .= "'" . $cliente->getDomicilio() . "',";
      $query .= "'" . $cliente->getTelefono() . "',";
      $query .= "'" . $cliente->getEmail() . "',";
      $query .= $cliente->getIdTipoDocumento() . ",";
      $query .= "'" . $cliente->getUsuario() . "',";
      $query .= $cliente->getDeshabilitado() . ")";
      $result = $this->PostSQL($query);
      $this->commitTransaction();
      $this->CloseDB($link);
      return $result;
    } catch (Exception $ex)
    {
      return $ex->getCode() + "|" + $ex->getMessage();
    }
  }

  function modificar(Cliente $cliente)
  {
    try
    {
      $link = $this->OpenDB();
      $this->beginTransaction();
//      if ($this->VerificarVersion($cliente->getVersion(), $cliente->getId()))
//      {
        $query = "UPDATE " . $this->tabla . " SET ";
        $query .= "nombre = '" . $cliente->getNombre() . "', ";
        $query .= "apellido = '" . $cliente->getApellido() . "', ";
        $query .= "nroDocumento = '" . $cliente->getNroDocumento() . "', ";
        $query .= "domicilio = '" . $cliente->getDomicilio() . "', ";
        $query .= "telefono = '" . $cliente->getTelefono() . "', ";
        $query .= "email = '" . $cliente->getEmail() . "', ";
        $query .= "tipoDocumento = " . $cliente->getIdTipoDocumento() . ", ";
        $query .= "usuario = '" . $cliente->getUsuario() . "', ";
        $query .= "deshabilitado = " . $cliente->getDeshabilitado();
        $query .= " WHERE " . $this->id . " = " . $cliente->getId();
        $result = $this->PostSQL($query);
        $this->commitTransaction();
        $this->CloseDB($link);
        return $result;
//      } else
//      {
//        $this->rollbackTransaction();
//        $this->CloseDB($link);
//        throw new Exception("El registro ha sido modificado por otro usuario", ERROR_VERSION);
//      }
    } catch (Exception $ex)
    {
      return $ex->getCode() + "|" + $ex->getMessage();
    }
  }

  function buscar($id)
  {
    if ($id != "")
    {
      $link = $this->OpenDB();
      $queryTxt = "SELECT apellido, cl.nombre AS nombre, domicilio, email, telefono, td.nombre AS tipoDocNombre, 
      nroDocumento, tipoDocumento, cl.deshabilitado deshabilitado, CONVERT(BIGINT, cl.version) AS version FROM " . $this->tabla . " cl
      JOIN tipo_documento  td ON tipoDocumento = idTipoDocumento
      WHERE " . $this->id . " = " . $id;      
      $query = $this->GetSQL($queryTxt);
      $this->CloseDB($link);

      $cliente = new Cliente();
      $cliente->setApellido($query[0]->apellido);
      $cliente->setVersion($query[0]->version);
      $cliente->setDeshabilitado($query[0]->deshabilitado);
      $cliente->setDomicilio($query[0]->domicilio);
      $cliente->setEmail($query[0]->email); 
      $cliente->setNombre($query[0]->nombre);
      $cliente->setNroDocumento($query[0]->nroDocumento);
      $cliente->setTelefono($query[0]->telefono);
      $tipoDocumento = new TipoDocumento();
      $tipoDocumento->setId($query[0]->tipoDocumento);
      $tipoDocumento->setNombre($query[0]->tipoDocNombre);
      $cliente->setTipoDocumento($tipoDocumento);
      $cliente->setId($id);
      return $cliente;
    } else
    {
      return new Cliente();
    }
  }

  function listar()
  {
    $clientesObj = parent::listar();
    $clientes = false;
    $repoTipoDoc = new RepoTipoDocumento();
    $cacheTiposDoc = $repoTipoDoc->obtenerListadoCache();
    if ($clientesObj)
    {
      foreach ($clientesObj as $clienteObj)
      {
        $tipoDeDocumento = new TipoDocumento();
        $tipoDeDocumento->setId($clienteObj->tipoDocumento);
        $tipoDeDocumento->setNombre($cacheTiposDoc[$clienteObj->tipoDocumento]);
        $cliente = new Cliente();
        $cliente->setApellido($clienteObj->apellido);
        $cliente->setVersion($clienteObj->version);
        $cliente->setDeshabilitado($clienteObj->deshabilitado);
        $cliente->setDomicilio($clienteObj->domicilio);
        $cliente->setEmail($clienteObj->email);
        $cliente->setNombre($clienteObj->nombre);
        $cliente->setNroDocumento($clienteObj->nroDocumento);
        $cliente->setTelefono($clienteObj->telefono);
        $cliente->setTipoDocumento($tipoDeDocumento);
        $cliente->setId($clienteObj->idClienteEventual);
        $clientes[] = $cliente;
      }
    }
    return $clientes;
  }

}

?>
